lectures.alex.balgavy.eu

Lecture notes from university.
git clone git://git.alex.balgavy.eu/lectures.alex.balgavy.eu.git
Log | Files | Refs | Submodules

Process management.html (2848B)


      1 <?xml version="1.0" encoding="UTF-8"?>
      2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      3 <html><head><link rel="stylesheet" href="sitewide.css"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><meta name="exporter-version" content="Evernote Mac 7.6 (457297)"/><meta name="altitude" content="276.5"/><meta name="author" content="Alex Balgavy"/><meta name="created" content="2018-11-09 12:55:30 +0000"/><meta name="latitude" content="50.11347908434513"/><meta name="longitude" content="14.33735006690641"/><meta name="source" content="desktop.mac"/><meta name="updated" content="2018-11-09 16:33:16 +0000"/><title>Process management</title></head><body><div>Minimal shell:</div><ol><li><div>Wait for command</div></li><li><div>Start process to execute command</div></li><li><div>Wait until process finished</div></li></ol><div><br/></div><div><span style="font-family: &quot;Courier New&quot;;">pid_t fork()</span></div><ul><li><div>duplicates current process</div></li><li><div>negative value — unsuccessful</div></li><li><div>zero — returned to newly created child process</div></li><li><div>positive — returned to parent or caller, value is PID of new process</div></li></ul><div><br/></div><div><span style="font-family: &quot;Courier New&quot;;">pid_t wait(int *wstatus)</span></div><ul><li><div>waits for child processes to change state</div></li><li><div>writes status to wstatus</div></li></ul><div><br/></div><div><span style="font-family: &quot;Courier New&quot;;">int exec(const char *path, char *constargv[])</span></div><ul><li><div>loads new binary from path in current process</div></li><li><div>constargv — program arguments</div></li><li><div>last argument is NULL (e.g. constargv = {“/bin/ls”, “-a”, NULL})</div></li></ul><div><br/></div><div><span style="font-family: &quot;Helvetica Neue&quot;;">signals</span></div><ul><li><div>processes may need to be interrupted</div></li><li><div>a signal is sent to process that needs to be interrupted</div></li><li><div>interrupted process catches signal using signal handler</div></li><li><div><font face="Courier New">sighandler_t signal(int signum, sighandler_t handler)</font></div></li><ul><li><div><font face="Helvetica Neue">registers signal handler</font></div></li></ul><li><div><font face="Courier New">unsignedint alarm(unsigned int secs)</font></div></li><ul><li><div><font face="Helvetica Neue">deliver SIGALARM in seconds</font></div></li></ul><li><div><font face="Courier New">int kill(pd_t pid, int sig)</font></div></li><ul><li><div><font face="Helvetica Neue">deliver signal to pid</font></div></li></ul></ul><div><br/></div><div>pipes</div><ul><li><div>pipe(fd) sets up a pipe</div></li><li><div>fd is array of 2 ints</div></li></ul><div><br/></div></body></html>